#include "fencalendrier.h"
#include "ui_fencalendrier.h"

FenCalendrier::FenCalendrier(QWidget *parent) :
    QMainWindow(parent)
{
    setAttribute(Qt::WA_DeleteOnClose);
    setupUi(this);

    int LargeurJour = 120;
    int LargeurVide = 30;

    for (int i = 0; i <= 12; i++)
    {
        CalendrierTableWidget->setColumnWidth(i, LargeurJour);
        i++;
        CalendrierTableWidget->setColumnWidth(i, LargeurVide);
    }

    CalendrierTableWidget->setColumnWidth(14, 20);
    progressBar->setVisible(false);
    CalendrierTableWidget->setRowCount(130);

    QObject::connect(AnalyserPushButton, SIGNAL(clicked()), this, SLOT(LancerAnalyse()));
}

FenCalendrier::~FenCalendrier()
{
    emit FermerSousFenetre(6);
    this->close();
}
void FenCalendrier::LancerAnalyse()
{
    AfficheCalendrier(dateEdit->date().month());
}

void FenCalendrier::AfficheCalendrier(int mois)
{
    int annee = Annee;

    if (mois < 9)
        annee += 1;

    QColor CouleurJour(255,110,110);
    QColor CouleurEleve(0,150,255);
    QColor CouleurTotaux(240,240,255);
    QDate dateNbJourDansLeMois(annee, mois, 1);

    int NbDeJour = dateNbJourDansLeMois.daysInMonth();

    int LigneSemaine = 0;
    int LigneJour = 0;
    int Ligne = 0;
    int Ecart = 0;

    int JourEnCours = 0;

    CalendrierTableWidget->clearContents();

    progressBar->setVisible(true);
    progressBar->setMaximum(NbDeJour);
    progressBar->setMinimum(1);

    for (int jour = 1; jour <= NbDeJour; jour++)
    {
        QDate date(annee, mois, jour);

        QTableWidgetItem *itemJour = new QTableWidgetItem();
        itemJour->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
        itemJour->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    itemJour->setBackgroundColor(CouleurJour);
        itemJour->setText(date.toString("d"));

        QTableWidgetItem *itemJourMontant = new QTableWidgetItem();
        itemJourMontant->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
        itemJourMontant->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
        itemJourMontant->setBackgroundColor(CouleurJour);

        CalendrierTableWidget->setItem(LigneSemaine ,(date.dayOfWeek()- 1)*2  , itemJour);
        CalendrierTableWidget->setItem(LigneSemaine ,(date.dayOfWeek()- 1)*2 + 1  , itemJourMontant);

        LigneJour = LigneSemaine + 1;

        for (int heure = 8; heure < 22; heure++)
        {
            for (int minutes = 0; minutes <= 59; minutes++ )
            {
                for (int i = 0 ; i < maListeEleve.count(); i++)
                {
                    if (maListeEleve.at(i).getProfPrincipal().getInfo().NomEtPrenom() == monProf.getInfo().NomEtPrenom())
                    {
                        for (int j = 0; j < maListeEleve.at(i).getListeCours().count(); j++)
                        {
                            if (maListeEleve.at(i).getListeCours().at(j).getProf().getInfo().NomEtPrenom() == monProf.getInfo().NomEtPrenom())
                            {
                                if (maListeEleve.at(i).getListeCours().at(j).getDate().year() == annee)
                                {
                                    if (maListeEleve.at(i).getListeCours().at(j).getDate().month() == mois)
                                    {
                                        if (maListeEleve.at(i).getListeCours().at(j).getDate().day() == jour)
                                        {

                                            if (maListeEleve.at(i).getListeCours().at(j).getHoraire().hour()== heure)
                                            {
                                                if (maListeEleve.at(i).getListeCours().at(j).getHoraire().minute() == (minutes))
                                                {
                                                    QTableWidgetItem *itemNom = new QTableWidgetItem();
                                                    itemNom->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
                                                    itemNom->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
                                                    itemNom->setBackgroundColor(CouleurEleve);
                                                    itemNom->setText(maListeEleve.at(i).getInfo().NomEtPrenom());

                                                    QTableWidgetItem *itemMontant = new QTableWidgetItem();
                                                    itemMontant->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
                                                    itemMontant->setBackgroundColor(CouleurEleve);
                                                    itemMontant->setText(QString::number(maListeEleve.at(i).getListeCours().at(j).gettypeDuCours().getTarif()));

                                                    if (JourEnCours != jour)
                                                    {
                                                        Ligne = 0;
                                                    }
                                                    else if (JourEnCours == jour)
                                                    {
                                                        Ligne += 1;
                                                        if (Ecart < Ligne)
                                                        {
                                                            Ecart = Ligne;
                                                        }
                                                    }
                                                    CalendrierTableWidget->setItem(LigneJour + Ligne ,(date.dayOfWeek()- 1)*2  , itemNom);
                                                    CalendrierTableWidget->setItem(LigneJour + Ligne ,(date.dayOfWeek()- 1)*2  + 1 , itemMontant);
                                                    JourEnCours = jour;
                                                    QApplication::processEvents();

                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }


        if (date.dayOfWeek() == 7 || jour == NbDeJour)
        {


            for (int i = (date.dayOfWeek() - 1); i >= 0; i--)
            {
                if (jour > i)
                {
                    if (maListeEleve.TotalCoursEleves(monProf.getInfo().NomEtPrenom(), mois, annee, jour - i) > 0)
                    {
                        QTableWidgetItem *itemTotalJour = new QTableWidgetItem();
                        itemTotalJour->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
                        itemTotalJour->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
                        itemTotalJour->setBackgroundColor(CouleurTotaux);
                        itemTotalJour->setText(TOTALCOURS);

                        QTableWidgetItem *itemMontantTotalJour = new QTableWidgetItem();
                        itemMontantTotalJour->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
                        itemMontantTotalJour->setTextColor(Qt::red);
                        itemMontantTotalJour->setBackgroundColor(CouleurTotaux);
                        itemMontantTotalJour->setText(QString::number(maListeEleve.TotalCoursEleves(monProf.getInfo().NomEtPrenom(), mois, annee, jour - i)));

                        QTableWidgetItem *itemTotalJourPartProf = new QTableWidgetItem();
                        itemTotalJourPartProf->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
                        itemTotalJourPartProf->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
                        itemTotalJourPartProf->setBackgroundColor(CouleurTotaux);
                        itemTotalJourPartProf->setText(TOTALPROF);

                        QTableWidgetItem *itemMontantTotalJourPartProf = new QTableWidgetItem();
                        itemMontantTotalJourPartProf->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
                        itemMontantTotalJourPartProf->setTextColor(Qt::blue);
                        itemMontantTotalJourPartProf->setBackgroundColor(CouleurTotaux);
                        itemMontantTotalJourPartProf->setText(QString::number(maListeEleve.TotalPartProfEleves(monProf.getInfo().NomEtPrenom(), mois, annee, jour - i)));

                        QTableWidgetItem *itemTotalJourPartAsso = new QTableWidgetItem();
                        itemTotalJourPartAsso->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
                        itemTotalJourPartAsso->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
                        itemTotalJourPartAsso->setBackgroundColor(CouleurTotaux);
                        itemTotalJourPartAsso->setText(TOTALASSO);

                        QTableWidgetItem *itemMontantTotalJourPartAsso = new QTableWidgetItem();
                        itemMontantTotalJourPartAsso->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
                        itemMontantTotalJourPartAsso->setTextColor(Qt::black);
                        itemMontantTotalJourPartAsso->setBackgroundColor(CouleurTotaux);
                        itemMontantTotalJourPartAsso->setText(QString::number(maListeEleve.TotalPartAssoEleves(monProf.getInfo().NomEtPrenom(), mois, annee, jour - i)));


                        CalendrierTableWidget->setItem(LigneJour + Ecart + 1 ,(date.dayOfWeek()- i - 1)*2 , itemTotalJour);
                        CalendrierTableWidget->setItem(LigneJour + Ecart + 1 ,(date.dayOfWeek()- i - 1)*2  + 1 , itemMontantTotalJour);
                        CalendrierTableWidget->setItem(LigneJour + Ecart + 2 ,(date.dayOfWeek()- i - 1)*2 , itemTotalJourPartProf);
                        CalendrierTableWidget->setItem(LigneJour + Ecart + 2 ,(date.dayOfWeek()- i - 1)*2  + 1 , itemMontantTotalJourPartProf);
                        CalendrierTableWidget->setItem(LigneJour + Ecart + 3 ,(date.dayOfWeek()- i - 1)*2 , itemTotalJourPartAsso);
                        CalendrierTableWidget->setItem(LigneJour + Ecart + 3 ,(date.dayOfWeek()- i - 1)*2  + 1 , itemMontantTotalJourPartAsso);

                    }
                }
            }
            LigneSemaine += Ecart + 5;
            Ecart = 0;
            Ligne = 1;
            progressBar->setValue(jour);
        }
    }

    QTableWidgetItem *itemTotalMois = new QTableWidgetItem();
    itemTotalMois->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    itemTotalMois->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    itemTotalMois->setBackgroundColor(CouleurTotaux);
    itemTotalMois->setText(TOTALCOURS);

    QTableWidgetItem *itemMontantTotalMois = new QTableWidgetItem();
    itemMontantTotalMois->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    itemMontantTotalMois->setBackgroundColor(CouleurTotaux);
    itemMontantTotalMois->setTextColor(Qt::red);
    itemMontantTotalMois->setText(QString::number(maListeEleve.TotalCoursEleves(monProf.getInfo().NomEtPrenom(), mois, annee)));

    QTableWidgetItem *itemTotalMoisPartProf = new QTableWidgetItem();
    itemTotalMoisPartProf->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    itemTotalMoisPartProf->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    itemTotalMoisPartProf->setBackgroundColor(CouleurTotaux);
    itemTotalMoisPartProf->setText(TOTALPROF);

    QTableWidgetItem *itemMontantTotalMoisPartProf = new QTableWidgetItem();
    itemMontantTotalMoisPartProf->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    itemMontantTotalMoisPartProf->setBackgroundColor(CouleurTotaux);
    itemMontantTotalMoisPartProf->setTextColor(Qt::blue);
    itemMontantTotalMoisPartProf->setText(QString::number(maListeEleve.TotalPartProfEleves(monProf.getInfo().NomEtPrenom(), mois, annee)));

    QTableWidgetItem *itemTotalmoisPartAsso = new QTableWidgetItem();
    itemTotalmoisPartAsso->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    itemTotalmoisPartAsso->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    itemTotalmoisPartAsso->setBackgroundColor(CouleurTotaux);
    itemTotalmoisPartAsso->setText(TOTALASSO);

    QTableWidgetItem *itemMontantTotalMoisPartAsso = new QTableWidgetItem();
    itemMontantTotalMoisPartAsso->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
    itemMontantTotalMoisPartAsso->setBackgroundColor(CouleurTotaux);
    itemMontantTotalMoisPartAsso->setTextColor(Qt::black);
    itemMontantTotalMoisPartAsso->setText(QString::number(maListeEleve.TotalPartAssoEleves(monProf.getInfo().NomEtPrenom(), mois, annee)));


    CalendrierTableWidget->setItem(1 , 15, itemTotalMois);
    CalendrierTableWidget->setItem(1 , 16, itemMontantTotalMois);
    CalendrierTableWidget->setItem(2 , 15, itemTotalMoisPartProf);
    CalendrierTableWidget->setItem(2 , 16, itemMontantTotalMoisPartProf);
    CalendrierTableWidget->setItem(3 , 15, itemTotalmoisPartAsso);
    CalendrierTableWidget->setItem(3 , 16, itemMontantTotalMoisPartAsso);

    progressBar->setVisible(false);


}
void FenCalendrier::ReceptionDonnees(ListeEleve &le, Prof pf, bool ProfConnectEtat)
{
    maListeEleve = le;
    monProf = pf;
    Annee = maListeEleve.GetAnnee();

}
